﻿var templateFormVue = new Vue({
    el: "#templateForm",
    data: {
        isNewForm: true,
        templateForm: {
            BaseInfo: {
                ID: 0,
                Name: "",
                EquipmentTypeID: "",
                IsDisable: 0
            },
            ItemMappings: [
                /* 数据结构
                FormID: 0,
                ItemID: 0,
                Priority: 1
                */
            ]
        },
        maintItems: [],                 //所有保养项目数组
        itemCheckedList: [],            //所选保养项目List
        typeDictionary: {},
        isDisableDictionary: {}
    },
    methods: {
        SaveForm: function (event) {
            event.preventDefault();
            SaveTemplateForm(this);
        },
        UpdateForm: function (event) {
            event.preventDefault();
            UpdateTemplateForm(this);
        },
        ChangeEquipmentType: function () {
            //改变设备类型时更新保养项目
            GetTemplateFormItemList(this, this.templateForm.BaseInfo.EquipmentTypeID);
        }
    },
    created: function () {
        //页面加载前初始的数据
        InitialAztechScript();
    },
    mounted: function () {
        //页面加载后初始的数据
        this.typeDictionary = GlobalDictionary.GetEquipmentTypeDictionary();
        this.isDisableDictionary = GlobalDictionary.GetTrueOrFalseDictionary();

        var isNew = GetQueryString("IsNew");
        var formID = GetQueryString("FormID");
        if (isNew == "true") {
            this.isNewForm = true;
        } else {
            this.isNewForm = false;            
            GetTemplateFormByID(this, formID);
        }
    },
    watch: {
        templateForm: {
            handler: function (val, oVal) {
                if (val.BaseInfo.Name.length > 0) 
                    CheckFormName(this);
                if (val.BaseInfo.EquipmentTypeID > 0) 
                    CheckEquipmentType(this);
            },
            deep: true
        }
    }
});

/**
 * 根据模板ID查询模板详细信息
 */
function GetTemplateFormByID(vue, formID) {
    parent.ShowAzLoading();
    $.ajax({
        type: "GET",
        url: "/Maintain/GetTemplateFormByID?FormID=" + formID + "&v=" + Math.random(),
        success: function (res) {
            if (res.status == "Success") {
                //console.log(res.data);
                vue.templateForm = res.data;
                GetTemplateFormItemList(vue, vue.templateForm.BaseInfo.EquipmentTypeID);
            } else {
                toastr.error(res.message);
            }
            parent.HideAzLoading();
        },
        error: function (err) {
            console.log(err);
            parent.HideAzLoading();
            toastr.error("获取保养单模板失败，请稍后再试Failed to obtain the maintenance order template. Please try again later。")
        }
    });
}

/**
 * 根据设备类型获取所有保养项目
 * 设置监听CheckBox事件，生成itemCheckedList
 */
function GetTemplateFormItemList(vue, equipmentTypeID) {
    parent.ShowAzLoading();
    $.ajax({
        type: "GET",
        url: "/Maintain/ListMaintainItemByEquipmentTypeID?IsDisable=false&TypeID=" + equipmentTypeID + "&v=" + Math.random(),
        success: function (res) {
            if (res.status == "Success") {
                vue.maintItems = res.data;
                vue.$nextTick(function () {
                    parent.ResizeAzModal(0);
                    ResetTemplateFormItemsCheckbox(vue);
                });
            } else {
                toastr.error(res.message);
            }
            parent.HideAzLoading();
        },
        error: function (err) {
            console.log(err);
            parent.HideAzLoading();
            toastr.error("获取该设备类型保养项目失败，请稍后再试Failed to get the maintenance items of this equipment type. Please try again later。")
        }
    });
}

/**
 * 保存保养单模板信息
 */
function SaveTemplateForm(vue) {
    if (CheckTemplateForm(vue)) {
        parent.ShowAzLoading();
        $("button").attr("disabled", true);
        ResetTemplateFormItems(vue);
        $.ajax({
            type: "POST",
            url: "/Maintain/SaveTemplateForm",
            data: { templateForm: vue.templateForm },
            success: function (res) {
                if (res.status == "Success") {
                    toastr.success("成功保存保养单模板Successfully saved the maintenance order template。")
                    ResetForm(vue);
                } else {
                    toastr.error(res.message);
                }
                parent.HideAzLoading();
            },
            error: function (err) {
                console.log(err);
                parent.HideAzLoading();
                toastr.error("保存保养单模板失败，请稍后再试Failed to save the maintenance order template. Please try again later。")
            },
            complete: function () {
                parent.HideAzLoading();
                $("button").removeAttr("disabled");
            }
        });
    }
}

/**
 * 更新保养单模板信息
 */
function UpdateTemplateForm(vue) {
    if (CheckTemplateForm(vue)) {
        parent.ShowAzLoading();
        $("button").attr("disabled", true);
        ResetTemplateFormItems(vue);
        $.ajax({
            type: "POST",
            url: "/Maintain/UpdateTemplateForm",
            data: { templateForm: vue.templateForm },
            success: function (res) {
                if (res.status == "Success") {
                    toastr.success("成功更新保养单模板Successfully updated the maintenance order template。")
                } else {
                    toastr.error(res.message);
                }
                parent.HideAzLoading();
            },
            error: function (err) {
                console.log(err);
                parent.HideAzLoading();
                toastr.error("更新保养单模板失败，请稍后再试Failed to update the maintenance order template. Please try again later。")
            },
            complete: function () {
                parent.HideAzLoading();
                $("button").removeAttr("disabled");
            }
        });
    }
}

/**
 * 重置保养项目复选框状态
 */
function ResetTemplateFormItemsCheckbox(vue) {
    //重置选择保养项目为空
    vue.itemCheckedList = [];

    //监听保养项目点击事件
    $("input[type=checkbox]").click(function (event) {
        //保养项目是根据点击先后判断项目优先级
        //如果项目之前存在则先删除，再放到数组最后
        for (var idx in vue.itemCheckedList) {
            if ($(this).val() == vue.itemCheckedList[idx]) {
                vue.itemCheckedList.splice(idx, 1);
            }
        }
        if ($(this).prop("checked") == true) {
            vue.itemCheckedList.push($(this).val());
        }
    });

    //清空所有复选框状态
    $("input[type=checkbox]").each(function () {
        $(this).prop("checked", false);
    })

    //如果详细信息包含已选择保养项目，则按顺序重新赋值
    for (var idx in vue.templateForm.ItemMappings) {
        var mapping = vue.templateForm.ItemMappings[idx];
        //只保留现有保养项目，用于清除原有选择的项目
        for (var itemIdx in vue.maintItems) {
            if (vue.maintItems[itemIdx].ID == mapping.ItemID) {
                vue.itemCheckedList.push(mapping.ItemID);
                $("input[type=checkbox]").each(function () {
                    if ($(this).val() == mapping.ItemID) {
                        $(this).prop("checked", true);
                    }
                });
            }
        }
    }
}

/**
 * 重置保养单的所选中的保养项目顺序
 */
function ResetTemplateFormItems(vue) {
    if (vue.itemCheckedList.length > 0) {
        vue.templateForm.ItemMappings = [];
        for (var i = 0; i < vue.itemCheckedList.length; i++) {
            var obj = {
                FormID: vue.templateForm.BaseInfo.ID,
                ItemID: vue.itemCheckedList[i],
                Priority: i+1
            }
            vue.templateForm.ItemMappings.push(obj);
        }
    }
}

/**
 * 清空信息
 */
function ResetForm(vue) {
    vue.maintItems = [];
    vue.templateForm = {
        BaseInfo: {
            ID: 0,
            Name: "",
            EquipmentTypeID: "",
            IsDisable: 0
        },
        ItemMappings: []
    }
}

/**
 * 检查模板信息正确性
 */
function CheckTemplateForm(vue) {
    if (!CheckFormName(vue)) {
        toastr.error("请填写正确模板名称Please fill in the correct template name。");
        return false;
    } else if (!CheckEquipmentType(vue)) {
        toastr.error("请选择设备类型Please select a device type。");
        return false;
    } else if (!CheckMaintainItems(vue)) {
        toastr.error("请至少选择一个保养项目Please select at least one maintenance item。");
        return false;
    } else {
        return true;
    }
}

/**
 * 检查是否已填写模板名称
 */
function CheckFormName(vue) {
    $("#formName").removeClass("has-error");
    if (vue.templateForm.BaseInfo.Name == null || vue.templateForm.BaseInfo.Name.length == 0) {
        $("#formName").addClass("has-error");
        return false;
    }
    return true;
}

/**
 * 检查是否已选择设备类型
 */
function CheckEquipmentType(vue) {
    $("#equipmentType").removeClass("has-error");
    if (vue.templateForm.BaseInfo.EquipmentTypeID == 0) {
        $("#equipmentType").addClass("has-error");
        return false;
    }
    return true;
}
/**
 * 检查是否已选择保养项目
 */
function CheckMaintainItems(vue) {
    if (vue.itemCheckedList.length == 0) {
        return false;
    }
    return true;
}
